package com.example.driving.ui;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.driving.R;
import com.example.driving.model.Chat;
import com.example.driving.ui.adapter.ChatAdapter;
import com.example.driving.utils.ChatGPTRequest;
import com.example.driving.utils.OnResponseReceivedListener;

import java.util.ArrayList;

/**
 * 聊天界面的Activity，用于展示聊天对话和发送聊天消息。
 */
public class ChatActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

    private EditText editText;           // 输入文本的EditText
    private ArrayList<Chat> data;        // 存储聊天数据的ArrayList
    private ChatAdapter chatAdapter;     // 聊天适配器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        data = new ArrayList<>();
        data.add(new Chat(R.drawable.service, "你好，有什么可以帮助你的吗",
                Chat.TYPE_RECEIVE));

        recyclerView=findViewById(R.id.recyclerView);

        chatAdapter=new ChatAdapter(data);

        recyclerView.setAdapter(chatAdapter);
        //设置RecyclerView的布局管理器为LinearLayoutManager，以垂直方向显示聊天消息。
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.addOnLayoutChangeListener((v,left,top,right,bottom,
                                                oldLeft,oldTop,oldRight,oldBottom)->

                //添加一个布局变化的监听器，当布局变化时自动滚动到最后一条聊天消息的位置，保持聊天界面始终显示最新的消息。
                recyclerView.scrollToPosition(chatAdapter.getItemCount()-1));
        findViewById(R.id.layoutSend).setOnClickListener(this::send);
        editText=findViewById(R.id.inputMessage);
    }

    private void send(View view) {
        String message=editText.getText().toString();
        String dispose_message="(你是一个专业的驾校平台的后台客服，请回答我后面的问题，并且回答不能朝纲，需要你回答的尽量像个人)"+message;
        ChatGPTRequest chatGPTRequest = new ChatGPTRequest();
        chatGPTRequest.setOnResponseReceivedListener(message1 -> {
            // 在收到响应时进行处理
            // 这里可以更新UI或执行其他操作
            data.add(new Chat(R.drawable.service, message1, Chat.TYPE_RECEIVE));
            chatAdapter.notifyItemInserted(chatAdapter.getItemCount() - 1);
            recyclerView.scrollToPosition(chatAdapter.getItemCount() - 1);
        });
        chatGPTRequest.execute(dispose_message);// 发送请求并传递输入文本

        data.add(new Chat(R.mipmap.icon_head_default,message,Chat.TYPE_SEND));

        //通知适配器有一条新的聊天消息被插入，以便更新界面显示。
        chatAdapter.notifyItemInserted(chatAdapter.getItemCount()-1);
        recyclerView.scrollToPosition(chatAdapter.getItemCount()-1);
        editText.setText("");
    }
}